#include "revoice.h"
#include <QMessageBox>
#include <QDebug>

Revoice::Revoice(QString parentPath, QTreeWidgetItem *parentSound, Ui::MainWindow *p_ui)
{
    path = parentPath + "/revoices/";

    type = "Revoice";

    ui = p_ui;

    pToOriginal = NULL;

    this->parentSound = parentSound;

    // Настройка элементов
    items.push_back( new QTableWidgetItem("<unknown_name>"));
    items.push_back( new QTableWidgetItem("<unknown_author>"));
    items.push_back( new QTableWidgetItem("<unknown_time>"));

    radioButtonGeneral = new QRadioButton();
    radioButtonGeneral->setChecked(false);
}

bool Revoice::loadInfo(QFile *infoFile)
{
    qDebug() << "-------------------------------";
    QString* tempString     = new QString;
    QString* variableName   = new QString;
    QString* value          = new QString;

    while( true)
    {
        *tempString = infoFile->readLine();  // Получение строки из файла
        *tempString = tempString->trimmed();  // Удаление лишних пробелов

        if(tempString->isEmpty())    // Если строка пуста пропустить её
            continue;

        *variableName = "";
        *value = "";
        setVarNValue(*tempString, *variableName, *value);  // Разбивает tempString на имя переменной (*variableName) и значение (value)

        if( *variableName == "fileName")
        {
            filename = *value;
            path += filename;
        }
        else if( *variableName == "length")
        {
            length = *value;
        }
        else if( *variableName == "name")
        {
            name = *value;
            items.at(0)->setText(name);
            qDebug() << "Revoice::loadInfo(): Варианту озвучки дается имя " << items.at(0)->text();
        }
        else if( *variableName == "author")
        {
            author = *value;
            items.at(1)->setText(author);
        }
        else if( *variableName == "general")
        {
            general = (bool) value->toInt();
            radioButtonGeneral->setChecked(general);
        }
        else if( *variableName == "[end]")
        {
            qDebug() << "Revoice::loadInfo(): Вариант озвучки " << path.toStdString().c_str() << ": Обнаружена метка [end], делаю коннекты и выхожу";
            qDebug() << "------------------------------";

            delete tempString;
            delete variableName;
            delete value;

            return true;
        }
        else
        {
            QMessageBox::warning(new QWidget(), "Ошибка", QString("Обнаружена неизвестная переменная %1 при загрузке %2. Класс: Revoice, функция: loadInfo()").arg(*variableName, path),
                                 QMessageBox::Ok);

            infoFile->close();
            delete infoFile;
            return false;
        }
    }
}

void Revoice::setVarNValue(QString& fullstring, QString& var, QString& value)
{
    // Присвоение var значения
    int i = 0;
    for( ; i < fullstring.size(); i++)
        if( fullstring.at(i) != ' ')
            var += fullstring.at(i);
        else
            break;

    // Присвоение value значения
    fullstring.remove(0, i+1);
    value = fullstring;
}

void Revoice::makeCopy(Revoice *copy)
{
    // Копирование данных которые можно скопировать простым путем
    qDebug() << "------------------------------------";
    qDebug() << "Revoice::makeCopy(): Создается копия переозвучки " << path << " с именем " << name;
    qDebug() << "Revoice::makeCopy(): Данные из вектора:" << items.at(0)->text() << items.at(1)->text() << items.at(2);

    copy->author     = author;
    copy->filename   = filename;
    copy->general    = general;
    copy->name       = name;
    copy->path       = path;
    copy->length     = length;
    copy->radioButtonGeneral = new QRadioButton(radioButtonGeneral);

    copy->pToOriginal = this;

    // Копирование сложных объектов
    qDebug() << "Revoice::makeCopy(): Создается копия элементов таблицы:";
    QTableWidgetItem *tableItem;
    for( int i = 0; i < 3; i++)
    {

        tableItem = new QTableWidgetItem( );
        *tableItem = *items.at(i);
        qDebug() << "Revoice::makeCopy(): " << tableItem->text();

        delete tableItem;
    }
}

QVector <QTableWidgetItem*> Revoice::getItems()
{
    // Функция возвращает копию данных из вектора вместо возвращения указателей
    qDebug() << "Revoice::getItems(): Вызвана функция getItems() объекта " << filename;
    qDebug() << "Revoice::getItems(): Данные из объекта: " << name << author << length;

    QVector <QTableWidgetItem*> newItems;

    newItems.push_back( new QTableWidgetItem(name));
    newItems.push_back( new QTableWidgetItem(author));
    newItems.push_back( new QTableWidgetItem(length));

    qDebug() << "Revoice::getItems(): Функция getItems возвращает объект с элементами имеющими такие строки:";
    qDebug() << "Revoice::getItems(): " << newItems.at(0)->text() << ' ' << newItems.at(1)->text() << ' ' << newItems.at(2)->text();

    return newItems;
}
QRadioButton* Revoice::getRadioButton()
{
    return new QRadioButton(radioButtonGeneral);
}
